#!/usr/bin/perl
# 
# Este script permite depurar el listado de grupos
# de OpenLDAP, y generar el listado limpio...
#
 use MIME::Base64;

 if ( 2 != $#ARGV ) {
    print "ERROR: Debes pasar <Listado_groups_SAMBA>  <Listado_groups_LDAP> <Blacklist_grupos>\n";
    exit 4;
 }

 # Cargar el listado de usuarios de SAMBA...
 open (FILE, $ARGV[0] );
 @smbGroups=<FILE>;
 close FILE;

 open (FILE, $ARGV[2] );
 @blacklistGroups=<FILE>;
 close FILE;

 # Abrir en modo lectura el fichero de LDAP
 open(FILE,"<". $ARGV[1]) || die ("ERROR: No puedo abrir [".$ARGV[1]."]\n");
 # Leer el fichero de LDAP...
 while ( chomp($linea=<FILE>) ) {
    if ( $linea=~m/^cn:\s(\S+)\s*$/ ) {
       $Cn=$1;
       $Cn="Usuarios del dominio" if ( "Usuarios" eq "$Cn" );
    } elsif ( $linea=~m/^description:\s(\S.+\S)\s*$/ ) {
       $Sn=$1;
    } elsif ( $linea=~m/^description::\s(\S+)\s*$/ ) {
       $Sn=decode_base64($1);
    } elsif ( $linea=~m/^dn:\s(\S.+\S)\s*$/ ) {
       $newDn=$1;
       if ( ( "" ne "$Dn" ) && ( "" ne "$Cn" )) {
          if ( grep( /^$Cn$/, @smbGroups ) ) {
             if ( grep(/^$Cn$/, @blacklistGroups)) {
                print "NO#";
             }else{
                print "SI#";
             }
             print $Cn ."#". $Sn ."#\n";
          }
       }
       $Dn=$newDn;
       $Cn="";
       $Sn="";
    }
 } 
 close FILE;

       if ( ( "" ne "$Dn" ) && ( "" ne "$Cn" )) {
          if ( grep( /^$Cn$/, @smbGroups ) ) {
             if ( grep(/^$Cn$/, @blacklistGroups)) {
                print "NO#";
             }else{
                print "SI#";
             }
             print $Cn ."#". $Sn ."#\n";
          }
       }


